package com.dk.data;

import com.dk.domain.ApiAutoTestEntity;
import com.dk.domain.ApiEntity;
import com.dk.domain.CaseEntity;
import com.dk.exception.ExcelDataException;
import com.dk.util.file.ExcelUtil;
import com.dk.util.file.FileUtil;
import org.apache.commons.beanutils.BeanUtils;

import java.lang.reflect.InvocationTargetException;
import java.util.*;

/**
 * 数据工具
 */
public class DataUtil {

    /**
     * 获取文件夹下所有文件的数据,(根据文件夹路径,sheet名称,实体类型获取list数据)
     * @param folderPath 文件夹路径
     * @param sheetName sheet名称
     * @param clazz 实体类类型
     * @param <T> 泛型
     * @return 目标实体类集合
     */
    public static <T> List<T> getTestDataInSheet(String folderPath,String sheetName,Class<T> clazz){
        //存放文件路径
        List<String> pathList = null;
        //最终返回结果
        List<T> resultList = new ArrayList<>();
        try {
            //获取所有文件路径到list
            pathList = FileUtil.getFolderAllFilePath(folderPath);
        } catch (ExcelDataException e) {
            e.printStackTrace();
        }
        //遍历文件路径,将读取到的excel数据塞到结果list
        pathList.stream().forEach(path->{
            resultList.addAll(ExcelUtil.readExcel(path, sheetName, clazz));
        });
        return resultList;
    }

    /**
     * 合并接口数据集合和用例数据集合
     * @param apiEntityList 接口数据集合
     * @param CaseEntityList 用例数据集合
     * @return 测试集合
     */
    public static Set<ApiAutoTestEntity> getApiAutoTestSet(List<ApiEntity> apiEntityList, List<CaseEntity> CaseEntityList){
        //最终返回结果
        Set<ApiAutoTestEntity> result = new HashSet<>();
        //遍历用例集合
        CaseEntityList.stream().forEach(caseEntity -> {
            //需要塞到结果集合的对象
            ApiAutoTestEntity apiAutoTestEntity = new ApiAutoTestEntity();
            try {
                //将遍历的用例对象复制到结果对象
                BeanUtils.copyProperties(apiAutoTestEntity,caseEntity);
                //遍历接口对象,筛选用例对象对应编号的对象复制到结果对象上
                for(ApiEntity apiEntity:apiEntityList){
                    if(apiEntity.getApiNum().equals(caseEntity.getApiNum())){
                        BeanUtils.copyProperties(apiAutoTestEntity,apiEntity);
                    }
                }
                result.add(apiAutoTestEntity);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        });
        return result;
    }
}
